package net.minecraft.src;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import net.minecraft.src.NBTBase;
import net.minecraft.src.NBTTagByte;
import net.minecraft.src.NBTTagByteArray;
import net.minecraft.src.NBTTagDouble;
import net.minecraft.src.NBTTagFloat;
import net.minecraft.src.NBTTagInt;
import net.minecraft.src.NBTTagList;
import net.minecraft.src.NBTTagLong;
import net.minecraft.src.NBTTagShort;
import net.minecraft.src.NBTTagString;

public class NBTTagCompound extends NBTBase {

   private Map tagMap = new HashMap();


   public NBTTagCompound() {
      super();
   }

   void writeTagContents(DataOutput var1) throws IOException {
      Iterator var2 = this.tagMap.values().iterator();

      while(var2.hasNext()) {
         NBTBase var3 = (NBTBase)var2.next();
         NBTBase.writeTag(var3, var1);
      }

      var1.writeByte(0);
   }

   void readTagContents(DataInput var1) throws IOException {
      this.tagMap.clear();

      NBTBase var2;
      while((var2 = NBTBase.readTag(var1)).getType() != 0) {
         this.tagMap.put(var2.getKey(), var2);
      }

   }

   public Collection func_28110_c() {
      return this.tagMap.values();
   }

   public byte getType() {
      return (byte)10;
   }

   public void setTag(String var1, NBTBase var2) {
      this.tagMap.put(var1, var2.setKey(var1));
   }

   public void setByte(String var1, byte var2) {
      this.tagMap.put(var1, (new NBTTagByte(var2)).setKey(var1));
   }

   public void setShort(String var1, short var2) {
      this.tagMap.put(var1, (new NBTTagShort(var2)).setKey(var1));
   }

   public void setInteger(String var1, int var2) {
      this.tagMap.put(var1, (new NBTTagInt(var2)).setKey(var1));
   }

   public void setLong(String var1, long var2) {
      this.tagMap.put(var1, (new NBTTagLong(var2)).setKey(var1));
   }

   public void setFloat(String var1, float var2) {
      this.tagMap.put(var1, (new NBTTagFloat(var2)).setKey(var1));
   }

   public void setDouble(String var1, double var2) {
      this.tagMap.put(var1, (new NBTTagDouble(var2)).setKey(var1));
   }

   public void setString(String var1, String var2) {
      this.tagMap.put(var1, (new NBTTagString(var2)).setKey(var1));
   }

   public void setByteArray(String var1, byte[] var2) {
      this.tagMap.put(var1, (new NBTTagByteArray(var2)).setKey(var1));
   }

   public void setCompoundTag(String var1, NBTTagCompound var2) {
      this.tagMap.put(var1, var2.setKey(var1));
   }

   public void setBoolean(String var1, boolean var2) {
      this.setByte(var1, (byte)(var2?1:0));
   }

   public boolean hasKey(String var1) {
      return this.tagMap.containsKey(var1);
   }

   public byte getByte(String var1) {
      return !this.tagMap.containsKey(var1)?0:((NBTTagByte)this.tagMap.get(var1)).byteValue;
   }

   public short getShort(String var1) {
      return !this.tagMap.containsKey(var1)?0:((NBTTagShort)this.tagMap.get(var1)).shortValue;
   }

   public int getInteger(String var1) {
      return !this.tagMap.containsKey(var1)?0:((NBTTagInt)this.tagMap.get(var1)).intValue;
   }

   public long getLong(String var1) {
      return !this.tagMap.containsKey(var1)?0L:((NBTTagLong)this.tagMap.get(var1)).longValue;
   }

   public float getFloat(String var1) {
      return !this.tagMap.containsKey(var1)?0.0F:((NBTTagFloat)this.tagMap.get(var1)).floatValue;
   }

   public double getDouble(String var1) {
      return !this.tagMap.containsKey(var1)?0.0D:((NBTTagDouble)this.tagMap.get(var1)).doubleValue;
   }

   public String getString(String var1) {
      return !this.tagMap.containsKey(var1)?"":((NBTTagString)this.tagMap.get(var1)).stringValue;
   }

   public byte[] getByteArray(String var1) {
      return !this.tagMap.containsKey(var1)?new byte[0]:((NBTTagByteArray)this.tagMap.get(var1)).byteArray;
   }

   public NBTTagCompound getCompoundTag(String var1) {
      return !this.tagMap.containsKey(var1)?new NBTTagCompound():(NBTTagCompound)this.tagMap.get(var1);
   }

   public NBTTagList getTagList(String var1) {
      return !this.tagMap.containsKey(var1)?new NBTTagList():(NBTTagList)this.tagMap.get(var1);
   }

   public boolean getBoolean(String var1) {
      return this.getByte(var1) != 0;
   }

   public String toString() {
      return "" + this.tagMap.size() + " entries";
   }
}
